<?php
declare(strict_types = 1);

namespace app\admin\middleware;

class LoginMiddleware
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        // 前置中间件

        // 通过session和$request对线下的pathinfo方法判断是否通过login页面来访问
        // dump($request);
        if (empty(session('?admin_user')) && !preg_match('/login/', $request->pathinfo())) {
            # code...
            return redirect((string) url('login/index'));
        }
        $response = $next($request);
        /**
         * 后置中间判断用户是否登录思路：
         * 通过判断$request对象判断，过来的是不是Login控制器以及判断session是存在
         * 注：只有后置中间件，才能获取到$request对象下面的Controller方法
         *
         * 但是有一个问题，因为请求过程中还会执行login/index的方法直到return redirct
         * 为止，假设用户没有登录他又去访问我们的商品列表页，这样他就会走到某个方法的列表
         * 页，会把其中逻辑都执行了，像获取用户的数据，获取商品的数据等等，但由于重
         * 定向拦截了，所以不会输出方法中的数据，所以最好放到前置中间件中！
         */

        // 判断session是否存在，以及是否从Login过来的
        // if ( empty(session('?admin_user')) && $request->controller() != "Login" ) {
        //     # code...
        //     return redirect((string) url('login/index'));
        // }
        return $response;
    }
}
